*/
use Wikimedia\Rdbms\IDatabase;
+use MediaWiki\MediaWikiServices;
/**
* This abstract class implements many basic API functions, and is the base of
foreach ( (array)$actions as $action ) {
$errors = array_merge( $errors, $title->getUserPermissionsErrors( $action, $user ) );
}
+
if ( $errors ) {
+ // track block notices
+ if ( $this->getConfig()->get( 'EnableBlockNoticeStats' ) ) {
+ $this->trackBlockNotices( $errors );
+ }
+
$this->dieStatus( $this->errorArrayToStatus( $errors, $user ) );
}
}
+ /**
+ * Keep track of errors messages resulting from a block
+ *
+ * @param array $errors
+ */
+ private function trackBlockNotices( array $errors ) {
+ $errorMessageKeys = [
+ 'blockedtext',
+ 'blockedtext-partial',
+ 'autoblockedtext',
+ 'systemblockedtext',
+ ];
+
+ $statsd = MediaWikiServices::getInstance()->getStatsdDataFactory();
+
+ foreach ( $errors as $error ) {
+ if ( in_array( $error[0], $errorMessageKeys ) ) {
+ $wiki = $this->getConfig()->get( 'DBname' );
+ $statsd->increment( 'BlockNotices.' . $wiki . '.MediaWikiApi.returned' );
+ break;
+ }
+ }
+ }
+
/**
* Will only set a warning instead of failing if the global $wgDebugAPI
* is set to true. Otherwise behaves exactly as self::dieWithError().